// // 移动实体
// export function move(viewer) {
//     let modelDragHandler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas)
//     modelDragHandler.setInputAction(({ position }) => {
//       // 为viewer绑定MOUSE_DOWN事件监听器（执行函数，监听的事件）
//       const pickInfo = viewer.scene.pick(position)

//       if (!pickInfo) {
//         return
//       }
//       var ellipsoid = viewer.scene.globe.ellipsoid
//       var cartesian = viewer.scene.camera.pickEllipsoid(position, ellipsoid) //位置数据转换只地理数据类型

//       if(!cartesian){
//         return
//       }
//       // 如果点击空白区域，则不往下执行
//       viewer.scene.screenSpaceCameraController.enableRotate = false // 将相机锁定，不然后续移动实体时相机也会动
//       modelDragHandler.setInputAction(arg => {
//         // 为viewer绑定MOUSE_MOVE事件监听器（执行函数，监听的事件）
//         console.log('移动')
//         const position = arg.endPosition // arg有startPosition与endPosition两个属性，即移动前后的位置信息：Cartesian2对象
//         const cartesian = viewer.scene.globe.pick(viewer.camera.getPickRay(position), viewer.scene) //将Cartesian2转为Cartesian3
//         const selectedEntity = viewer.selectedEntity // 实体
//         if (!selectedEntity) {
//           return false
//         }
//         //注意需要赋值三维坐标
//         selectedEntity.position = cartesian
//         // 更新实体位置为当前鼠标位置
//       }, Cesium.ScreenSpaceEventType.MOUSE_MOVE)

//       modelDragHandler.setInputAction((e) => {

//         if(e){
//           modelDragHandler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE) // 解除viewer的MOUSE_MOVE事件监听器
//           modelDragHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_UP) // 解除viewer的LEFT_UP事件监听器
//           viewer.scene.screenSpaceCameraController.enableRotate = true // 取消相机锁定
//         }
//         //为viewer绑定LEFT_UP事件监听器（执行函数，监听的事件）

//         console.log('抬起')
//       }, Cesium.ScreenSpaceEventType.LEFT_UP)

//     }, Cesium.ScreenSpaceEventType.LEFT_DOWN)
//   }

export function move(viewer) {

  viewer.screenSpaceEventHandler.setInputAction(function (e) {
    leftDownAction(e, viewer)
  }, Cesium.ScreenSpaceEventType.LEFT_DOWN);
  let entity = ''
  let positions = null // 记录选中实体的位置信息
  let newPosition = null // 记录鼠标移动的位置
  let diff = [] // 记录选中实体与鼠标位置信息的差异
  // 拖拽实体对象-左键按下
  function leftDownAction(e, viewer) {
    entity = viewer.scene.drillPick(e.position, 1)[0];
    var position = changeToThree(e.position, viewer);
    if (entity) {
      // 锁定相机
      if (entity.id.polygon) {
        if (!entity.id.polygon.hierarchy._value) {
          return ''
        }
        positions = entity.id.polygon.hierarchy._value.positions;
      } else if (entity.id.polyline) {
        if (!entity.id.polyline.positions._value)
          return
        positions = entity.id.polyline.positions._value;
      };
      // 记录选中实体与鼠标位置信息的差异
      positions.forEach(function (item) {
        diff.push({
          x: item.x - position.x,
          y: item.y - position.y,
          z: item.z - position.z
        })
      });
      viewer.scene.screenSpaceCameraController.enableRotate = false;
    }
  }

  // 定义一个将经纬度格式转为世界坐标格式的方法
  function changeToThree(position, viewer) {
    if (!position) return [];
    return viewer.scene.globe.pick(viewer.camera.getPickRay(position), viewer.scene);
  }
  viewer.screenSpaceEventHandler.setInputAction(function (e) {
    mouseMoveAction(e, viewer)
  }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
  // 拖拽实体对象-鼠标移动
  function mouseMoveAction(e, viewer) {
    if (entity) {
      // 获取移动点的位置，且将格式转为世界坐标
      const movePosition = changeToThree(e.endPosition, viewer);
      // 根据鼠标位置以及选中实体与鼠标位置信息的差异计算出移动后的实体位置
      newPosition = diff.map(item => ({
        x: item.x + movePosition.x,
        y: item.y + movePosition.y,
        z: item.z + movePosition.z
      }));
      if (entity.id.polygon) {
        // 动态改变面的位置信息
        entity.id.polygon.hierarchy = new Cesium.CallbackProperty(function () {
          return new Cesium.PolygonHierarchy(newPosition)
        }, false);
        entity.id.polygon.positions = new Cesium.CallbackProperty(function () {
          return newPosition
        }, false);
      } else {
        entity.id.polyline.positions = new Cesium.CallbackProperty(function () {
          return newPosition
        }, false);
      };

    };
  }

  // 拖拽实体对象-左键抬起
  function leftUpAction(e, viewer) {
    if (entity.id.polygon) {
      entity.id.polygon.hierarchy = newPosition;
      entity.id.polygon.positions = newPosition;
    } else {
      entity.id.polyline.positions = newPosition;
    };
    positions = null; // 记录选中实体的位置信息
    newPosition = null; // 记录鼠标移动的位置
    diff = []; // 记录选中实体与鼠标位置信息的差异
    entity = null;

    // 解除相机锁定
    viewer.scene.screenSpaceCameraController.enableRotate = true;
  }
}

